package proy4sistdistribuidos.interfaz;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Iterator;

import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;

import proy4sistdistribuidos.modelo.ContenedorImagenTomada;
import proy4sistdistribuidos.modelo.ConvertidorNombresSitio;
import proy4sistdistribuidos.modelo.DatosImagenTomada;
import proy4sistdistribuidos.modelo.ImagenTomada;
import proy4sistdistribuidos.modelo.ListaDatosImagenTomada;
import proy4sistdistribuidos.serviciosweb.cliente.localizacion.ClienteSWLocalizacion;

import android.app.Activity;
import android.content.Intent;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.Toast;
import android.widget.TableRow.LayoutParams;
import android.widget.TextView;

public class VerFotosTomadasEnSitioActivity extends Activity {
	private String rutaCarpetaFotoTemporal = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
	private String nombreFotoTemporal = "fotoTemp.jpg";
	private RadioGroup myRadioGroup;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.verfotostomadasensitio);
        
        myRadioGroup = new RadioGroup(getApplicationContext());
        
        // ubicacion 
        WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        int ipAddress = wifiInfo.getIpAddress();
        String ip = String.format("%d.%d.%d.%d",
        		(ipAddress & 0xff),
        		(ipAddress >> 8 & 0xff),
        		(ipAddress >> 16 & 0xff),
        		(ipAddress >> 24 & 0xff));

        // invocar el ws
        String resultado = "";
        String resultado2 = "";
        
        try{
        	resultado = ClienteSWLocalizacion.obtenerSolitario().obtenerUbicacionCliente(ip);
        	resultado2 = ConvertidorNombresSitio.obtenerSolitario().obtenerNombreSitio(resultado);
        	
        	//Se hace la consulta
            Socket elSockete = new Socket(TomarFotoActivity.direccionIPEquipoEscritorio, TomarFotoActivity.puertoSocketEquipoEscritorio);
    		
    		String comando ="ObtenerInfoFotosTomadasEnSitio_"+resultado2;
            PrintWriter pregunta = new PrintWriter(elSockete.getOutputStream(), true);
            BufferedReader respuesta = new BufferedReader(new InputStreamReader(elSockete.getInputStream()));

            //Se envia el comando al equipo de escritorio
            pregunta.println(comando);

            //Se recibe la respuesta del equipo de escritorio
            String respNodo = respuesta.readLine();
            
            
            if(respNodo!=null && !respNodo.equals("")){
	            respNodo= respNodo.replaceAll("_CHARRO2_", "\r\n");
	            respNodo=respNodo.replaceAll("_CHARRO_", "\n");
	            
	            
	            Serializer serializador = new Persister();
	            
	            
	            
	            File f = new File(rutaCarpetaFotoTemporal,"temp.xml");
	            if(f.exists()){
	            	f.delete();
	            	f.createNewFile();
	            } else {
	            	f.createNewFile();
	            }
	    		//serializador.write(respNodo, f);
	    		
	    		//Se abre nuevamente el archivo
	    		
	    		PrintWriter wrXML = new PrintWriter(f);
	    		wrXML.print(respNodo);
	    		wrXML.close();
	    		
	    		ListaDatosImagenTomada lista=serializador.read(ListaDatosImagenTomada.class, f);
	    		Iterator iter = lista.getLista().iterator();
	    		
	    		/* Find Tablelayout defined in main.xml */
	            TableLayout tl = (TableLayout)findViewById(R.id.tl1);
	            /* Create a new row to be added. */
	            TableRow tr = new TableRow(this);
	            tr.setLayoutParams(new LayoutParams(
	                                LayoutParams.FILL_PARENT,
	                                LayoutParams.WRAP_CONTENT));
	            
	            
	            
	    		while (iter.hasNext()){
	    			DatosImagenTomada datos = (DatosImagenTomada) iter.next();
	    			RadioButton myRadioButton = new RadioButton(this);
	    			myRadioButton.setText(datos.getNombre());
	                myRadioButton.setButtonDrawable(null);
	                //myRadioButton.setBackgroundResource(R.drawable.radio_button_selector);
	                myRadioGroup.addView(myRadioButton);
	    		}
	    		
	    		tr.addView(myRadioGroup);
	            tl.addView(tr,new TableLayout.LayoutParams(
	                      LayoutParams.FILL_PARENT,
	                      LayoutParams.WRAP_CONTENT));
	           
	        
	            
            }
            
        }catch (Exception e) {
			e.printStackTrace();
		}
        
        //ListaDatosImagenTomada lista = new ListaDatosImagenTomada();
        
    }
	
	public void accionBotonDescargar(View view){
		
		try {
			int idSeleccionado = myRadioGroup.getCheckedRadioButtonId();
			String text = "";
			for(int i=0; i<myRadioGroup.getChildCount(); i++){
				RadioButton btn = (RadioButton) myRadioGroup.getChildAt(i);
				if(btn.getId() == idSeleccionado){
					text = btn.getText().toString();
				}
			}
			
			Serializer serializador = new Persister();
			
			//Se hace la consulta
			Socket elSockete = new Socket(TomarFotoActivity.direccionIPEquipoEscritorio, TomarFotoActivity.puertoSocketEquipoEscritorio);
			String comando ="ObtenerFotoPorNombre_"+text;
			PrintWriter pregunta = new PrintWriter(elSockete.getOutputStream(), true);
			BufferedReader respuesta = new BufferedReader(new InputStreamReader(elSockete.getInputStream()));

			//Se envia el comando al equipo de escritorio
			pregunta.println(comando);

			//Se recibe la respuesta del equipo de escritorio
			String respNodo = respuesta.readLine();
			
			elSockete.close();
			
			if(respNodo!=null && !respNodo.equals("")){
				  respNodo=respNodo.replaceAll("_CHARRO2_", "\r\n");
			      respNodo=respNodo.replaceAll("_CHARRO_", "\n");
			      
			      File f2A = new File(rutaCarpetaFotoTemporal,"temp2A.xml");
			      
			      if(f2A.exists()){
			    	  f2A.delete();
			    	  f2A.createNewFile();
			      } else {
			    	  f2A.createNewFile();
			      }
			      
			      FileWriter fw = new FileWriter(f2A);
			      fw.write(respNodo);
			      fw.close();
			      
			      ContenedorImagenTomada cont = serializador.read(ContenedorImagenTomada.class, f2A);
			      			      
			      ImagenTomada foto = cont.getContenidoImagen();
			      
			      File fto = new File(rutaCarpetaFotoTemporal, text + System.currentTimeMillis() +".jpg");
			      
			      FileOutputStream fos = new FileOutputStream(fto);      
			      fos.write(foto.getDatosImagen());
			     
			      fos.close(); 
			       
			      Toast.makeText(view.getContext(),"Archivo descargado en:"+fto.getAbsolutePath(), 4).show();
			      
			} else {
				throw new Exception ("No se encontro la foto");
			}
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 

	}
	
	
	public void accionBotonRegresar(View view){
        Intent intent = new Intent();
        setResult(RESULT_OK, intent);
        finish();
	}
}